// 文件名：deque_massive_queue.cpp
// 目的：利用 std::deque 构建支持“批量入队/批量出队”的大规模任务队列，减少调度开销。
// 设计要点：
//   - bulkEnqueue：接收一个批次（vector<string>），逐个 move 到队尾，避免拷贝；
//   - bulkDispatch(limit)：从队头弹出至多 limit 个任务，move 到输出向量，零拷贝转移所有权；
//   - size：查询当前积压数。
// 优势：
//   - deque 在头尾操作均摊 O(1)，适合海量队列的首尾操作；
//   - move 语义避免复制大字符串，提升性能。
// 注意事项：
//   - 多线程环境下需加锁；
//   - 可以将 bulkEnqueue 改为接收迭代器区间以支持更多容器类型。

#include <deque>
#include <vector>
#include <string>
#include <iostream>

class MassiveQueue {
public:
    // 批量入队（移动语义）
    void bulkEnqueue(std::vector<std::string> batch) {
        for (auto& job : batch) {
            jobs_.push_back(std::move(job)); // 将 job 内容移动到队尾
        }
    }

    // 批量出队（至多 limit 条），返回一个新的批次（移动语义）
    std::vector<std::string> bulkDispatch(std::size_t limit) {
        std::vector<std::string> out;
        out.reserve(limit); // 可选：减少动态扩容
        while (limit-- && !jobs_.empty()) {
            out.push_back(std::move(jobs_.front()));
            jobs_.pop_front();
        }
        return out; // 返回时移动构造/省略返回开销
    }

    // 当前积压大小
    std::size_t size() const { return jobs_.size(); }

private:
    std::deque<std::string> jobs_;
};

int main() {
    MassiveQueue queue;
    queue.bulkEnqueue({"job-1", "job-2", "job-3"});
    queue.bulkEnqueue({"job-4", "job-5"});

    auto firstWave = queue.bulkDispatch(3);
    std::cout << "Dispatched:";
    for (auto& job : firstWave) std::cout << ' ' << job;
    std::cout << "\nRemaining: " << queue.size() << '\n';

    auto secondWave = queue.bulkDispatch(10);
    std::cout << "Dispatched:";
    for (auto& job : secondWave) std::cout << ' ' << job;
    std::cout << "\nRemaining: " << queue.size() << '\n';
    return 0;
}